package main.daydayup.day0726;

import java.util.HashSet;

/**
 * 去除相同的数组，这些数组是按照大小排列好的
 * @author: kejl
 * @create: 2020-07-27 21:07
 */
public class RemoveDuplicates {
    public static void main(String[] args) {
        int[] nums = new int[]{0,0,1,1,1,2,2,3,3,4};
        int resutl = removeDuplicates(nums);
        for (int i = 0; i < 5; i++) {
            System.out.println(nums[i]);
        }
        System.out.println(resutl);

    }

    public static int removeDuplicates(int[] nums) {
        if (nums==null || nums.length==1){
            return 0;
        }

        int i = 0;//慢指针

        for (int j = 1; j < nums.length; j++) {//j是快指针初始比i大1,要和i有差距才可以比较出来快慢
            if(nums[i]!=nums[j]){
                i++;//不相同了，i再进1位，这样在i中就把相同的过滤了，也就是前i个都是不相同的了。
                nums[i] = nums[j];
            }
        }

        return i+1;

    }

    /**
     * 这个是我自己写的不用排序哦，
     * 我觉得还不如先用Arrays.sort()进行排序之后在用
     * 双指针进行
     * @param nums
     * @return
     */
    public static int removeDuplicates2(int[] nums) {

        if(nums==null ){
            return 0;
        }
        if(nums.length ==1){
            return 1;
        }
        HashSet<Integer> numsSet = new HashSet<Integer>();
        int numsLength = nums.length;
        for(int i = 0;i<numsLength;i++){
            if(numsSet.contains(nums[i])){

                for(int j =i;j< numsLength;j++){

                    if(j+1 == nums.length){
                        nums[j] =0;
                    }else{
                        nums[j] = nums[j+1];
                    }
                }
                numsLength--;
                i--;
            }else{
                numsSet.add(nums[i]);

            }
        }
        return numsLength;
    }
}
